package IU;

import Controladores.AnalizarContrato;
import Controladores.CtrlAMBOperario;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import java.util.Date;
import utiles.Validador;

import Entidades.Proveedor;
import Entidades.Producto;
import Entidades.Detallerecepcion;
import Entidades.Operario;
import Entidades.Transporte;
import Entidades.Transportista;
import Entidades.Pesajeentrada;
import Entidades.Pesajesalida;

import Controladores.CtrlEstadoespera;
import Controladores.CtrlEstadotransporte;
import Controladores.CtrlPesajeentrada;
import Controladores.CtrlTransporte;
import Controladores.CtrlPesajesalida;
import Controladores.CtrlStockproducto;
import Controladores.CtrlDetallerecepcion;

import Entidades.Estadoespera;
import Entidades.Stockproducto;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Vector;
import IU.BuscarPesajeSalida;

/**
 *
 * 
 * @author  Laura
 *  Detallerecepcion_1 detallerecepcion este lo trae de PesajeEntradaPendientes
 * Proveedor proveedor, Transporte transporte, Transportista transportista, Producto producto : no sé si me trae los objetos completos
 * o solo algún atributo de estos, supongo que lso trae completos, pero si no es así decime que atributos trae así
 * los busco yo con los controladores y me traigo los objeto como los necesito.
 *
 *
 *   con el pesaje de entrada...:
 *cuando creamos la recepcion podemos tener más de un detalle,
 * donde cada detalle hace referencia a un producto, entonces el camión trae malbec
 * y en el acoplado trae cabernet. Cuando hacemos el pesaje: peso entrada pendiente hace
 * referencia a cada uon detalle de recepcion

 */
public class PesajeAutomaticoSalida extends javax.swing.JFrame {

    private String cadenaBascula;
    ServidorSalida servidorSalida;
    Validador validador;
    CtrlPesajesalida ctrlpesajesalida;
    CtrlEstadoespera ctrlestadoespera;
    CtrlEstadotransporte ctrlestadotransporte;
    CtrlTransporte ctrltransporte;
    CtrlPesajeentrada ctrlpesajeentrada;
    CtrlStockproducto ctrlstockproducto;
    CtrlDetallerecepcion ctrldetallerecepcion;
    CtrlAMBOperario ctrloperario;
    Date fechaHoraPesajeEntrada;
    Date fechaHoraPesajeSalida;
    String a, b;
    String nombre;
    String oper;
    Detallerecepcion detallerecepcion;
    Transporte transporte;
    Estadoespera estadoespera;
    List<Detallerecepcion> listadetrecepcion = new ArrayList<Detallerecepcion>();
    Proveedor proveedor;
    Transportista transportista;
    Producto producto;
    String pat;
    int idRol;
    float pesoTaraCamion;
    float tara = 0;
    float pesoNeto = 0;
    int idPesada;
    int pesoAutomaticoSalida = 1; //no debería modificarse este valor ya que el pesaje es automatico por lo tanto automatico es 1;
    Pesajeentrada pesajeEntrada;
    Stockproducto stock;
    List<Pesajeentrada> lpesajeEntrada = new ArrayList<Pesajeentrada>();
    Collection<Stockproducto> listasprod = new ArrayList<Stockproducto>();
    Pesajeentrada pen;
    private float pesoBruto;
    Operario operarios;
    BuscarPesajeSalida bps;
    private float cantidad;

    //private final List<Detallerecepcion> listadetallesrecep;
    /* public PesajeAutomaticoSalida(String cadenaBascula, Proveedor prov, Transporte transport, Transportista transportist, List<Detallerecepcion_1> listadetallesrecep) {
    initComponents();

    System.getProperty("CtrlPesajeentrada.classpath");
    proveedor = prov;
    transportista = transportist;
    transporte = transport;
    //producto = product;
    System.out.println("antes de la lista");
    listadetrecepcion = listadetallesrecep;

    ctrlpesajesalida = new CtrlPesajesalida();
    ctrlestadoespera = new CtrlEstadoespera();
    ctrlestadotransporte = new CtrlEstadotransporte();
    ctrltransporte = new CtrlTransporte();
    ctrlpesajeentrada = new CtrlPesajeentrada();
    ctrlstockproducto = new CtrlStockproducto();

    jTextFieldPropietario.setText(proveedor.getRazonSocialProveedor());
    jTextFielTransportista.setText(transportista.getApellidoTransportista());
    jTextFielPatente2.setText(transporte.getPatenteTransporte());
    //  jTextFieldProducto.setText(producto.getNombreProducto());

    }*/
    /*   public PesajeAutomaticoSalida(String cadena) {

    initComponents();
    cadenaBascula=cadena;
    System.out.print(cadenaBascula);
    System.out.print("cadenaBascula");
    jTextFielPesoTaraCamion.setText(cadenaBascula);
    //       operariobascula.setText(operariobascula.getName());
    fecha.setText( obtenerFechaHoraActual().toString());
    // System.out.print(cadena);
    //  System.out.print(cadena);

    //Operario operarioB= new Operario();

    //        operario.setText(operarioB.getApellido());
    Date fechaP= new Date();
    fechaP.getTime();
    fecha.setText(fechaP.toString());
    }
     */
//    PesajeAutomaticoSalida(String cadenaBascula, Proveedor proveedorr, Transporte transportee, Transportista transportistaa, List<Detallerecepcion_1> listadetparamm, Producto productoo) {
    //      initComponents();
    /*    jTextFielPesoTaraCamion.setText(cadenaBascula);

    System.getProperty("CtrlPesajeentrada.classpath");
    proveedor = proveedor;
    transportista = transportista;
    transporte = transporte;
    producto = producto;
    System.out.println("antes de la lista");
    listadetrecepcion = listadetparam;
    System.out.println("no paso lal lista");

    ctrlpesajeentrada = new CtrlPesajeentrada();
    ctrlestadoespera = new CtrlEstadoespera();
    ctrlestadotransporte = new CtrlEstadotransporte();
    ctrltransporte = new CtrlTransporte();
    ctrldetallerecepcion = new CtrlDetallerecepcion();
    // Operario operario= new Operario();

    //operariobascula.setText(operario.getApellido());
    Date fechaP= new Date();
    fechaP.getTime();
    fecha.setText(fechaP.toString());

     */
    // initComponents();
    /*    peso.setText(cadenaBascula);

    // System.getProperty("CtrlPesajeentrada.classpath");
    proveedor = proveedorr;
    transportista = transportistaa;
    transporte = transportee;
    producto = productoo;
    System.out.println("antes de la lista");
    listadetrecepcion = listadetparamm;
    System.out.println("no paso lal lista");

    ctrlpesajeentrada = new CtrlPesajeentrada();
    ctrlestadoespera = new CtrlEstadoespera();
    ctrlestadotransporte = new CtrlEstadotransporte();
    ctrltransporte = new CtrlTransporte();
    ctrldetallerecepcion = new CtrlDetallerecepcion();




    }*/
    public PesajeAutomaticoSalida(String cadenaB, Proveedor prov, Transporte transport, Transportista transportist, List<Detallerecepcion> listadetallesrecep, Producto product, String operariosalida) {
        initComponents();
        oper = operariosalida;
        jTextFieldUsuario.setText(oper);
        //  System.getProperty("CtrlPesajeentrada.classpath");
        proveedor = prov;
        transportista = transportist;
        transporte = transport;
        producto = product;

        System.out.println("antes de la lista");
        listadetrecepcion = listadetallesrecep;

        jTextFielPesoTaraCamion.setText(cadenaB);
        ctrlpesajesalida = new CtrlPesajesalida();
        ctrlestadoespera = new CtrlEstadoespera();
        ctrlestadotransporte = new CtrlEstadotransporte();
        ctrltransporte = new CtrlTransporte();
        ctrlpesajeentrada = new CtrlPesajeentrada();
        ctrlstockproducto = new CtrlStockproducto();
        ctrldetallerecepcion = new CtrlDetallerecepcion();
        ctrloperario = new CtrlAMBOperario();

        Date fechaP = new Date();
        fechaP.getTime();
        fecha.setText(fechaP.toString());
        jButtonPesajeManual.setVisible(false);


//        jTextFieldPropietario.setText(proveedor.getRazonSocialProveedor());
        //      jTextFielTransportista.setText(transportista.getApellidoTransportista());
        //    jTextFielPatente2.setText(transporte.getPatenteTransporte());
        //   jTextFieldProducto.setText(producto.getNombreProducto());

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        btnRegistrarPesoAutomatico = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jTextFielPesoTaraCamion = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        fecha = new javax.swing.JTextField();
        jPanel13 = new javax.swing.JPanel();
        jTextFieldUsuario = new javax.swing.JTextField();
        jButtonPesajeManual = new javax.swing.JButton();
        jButtonSalir1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Pesaje Automatico de Salida - Sistema Gestor de Pesaje para Bodegas");

        jTabbedPane1.setForeground(new java.awt.Color(102, 0, 102));
        jTabbedPane1.setFont(new java.awt.Font("Segoe UI", 3, 12));

        btnRegistrarPesoAutomatico.setFont(new java.awt.Font("Segoe UI", 3, 12));
        btnRegistrarPesoAutomatico.setForeground(new java.awt.Color(102, 0, 102));
        btnRegistrarPesoAutomatico.setMnemonic('G');
        btnRegistrarPesoAutomatico.setText("Registrar");
        btnRegistrarPesoAutomatico.setName("pesajeManualEntrada2"); // NOI18N
        btnRegistrarPesoAutomatico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarPesoAutomaticoActionPerformed(evt);
            }
        });

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED), " Marcador Digital", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 3, 12), new java.awt.Color(102, 0, 102))); // NOI18N

        jLabel2.setFont(new java.awt.Font("Segoe UI", 1, 11));
        jLabel2.setText("Peso del Camión:");

        jLabel8.setFont(new java.awt.Font("Segoe UI", 1, 11));
        jLabel8.setText("Kgs.");

        jTextFielPesoTaraCamion.setEditable(false);
        jTextFielPesoTaraCamion.setFont(new java.awt.Font("Neuropol", 1, 36));
        jTextFielPesoTaraCamion.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
        jTextFielPesoTaraCamion.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                jTextFielPesoTaraCamionComponentShown(evt);
            }
        });
        jTextFielPesoTaraCamion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFielPesoTaraCamionActionPerformed(evt);
            }
        });
        jTextFielPesoTaraCamion.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                jTextFielPesoTaraCamionPropertyChange(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(37, 37, 37)
                .addComponent(jLabel2)
                .addGap(40, 40, 40)
                .addComponent(jTextFielPesoTaraCamion, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(33, 33, 33)
                .addComponent(jLabel8)
                .addContainerGap(75, Short.MAX_VALUE))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(35, 35, 35)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jLabel8)
                    .addComponent(jTextFielPesoTaraCamion, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(35, Short.MAX_VALUE))
        );

        jLabel3.setFont(new java.awt.Font("Segoe UI", 1, 11));
        jLabel3.setText("Fecha:");

        fecha.setEditable(false);
        fecha.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));

        jPanel13.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED), "Usuario Registrado", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 3, 12), new java.awt.Color(102, 0, 102))); // NOI18N

        jTextFieldUsuario.setEditable(false);
        jTextFieldUsuario.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));

        javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
        jPanel13.setLayout(jPanel13Layout);
        jPanel13Layout.setHorizontalGroup(
            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel13Layout.createSequentialGroup()
                .addGap(18, 18, 18)
                .addComponent(jTextFieldUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(18, Short.MAX_VALUE))
        );
        jPanel13Layout.setVerticalGroup(
            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel13Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextFieldUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(20, Short.MAX_VALUE))
        );

        jButtonPesajeManual.setFont(new java.awt.Font("Segoe UI", 3, 12));
        jButtonPesajeManual.setForeground(new java.awt.Color(102, 0, 102));
        jButtonPesajeManual.setText("Registro Manual");
        jButtonPesajeManual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonPesajeManualActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGap(49, 49, 49)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(137, 137, 137)
                        .addComponent(jLabel3)
                        .addGap(37, 37, 37)
                        .addComponent(fecha, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(btnRegistrarPesoAutomatico, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jButtonPesajeManual)))
                .addContainerGap(52, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(43, 43, 43)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(fecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3))))
                .addGap(18, 18, 18)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 66, Short.MAX_VALUE)
                .addComponent(btnRegistrarPesoAutomatico)
                .addGap(22, 22, 22)
                .addComponent(jButtonPesajeManual)
                .addContainerGap())
        );

        jTabbedPane1.addTab("Pesaje Automático Salida", jPanel1);

        jButtonSalir1.setFont(new java.awt.Font("Segoe UI", 3, 12));
        jButtonSalir1.setForeground(new java.awt.Color(102, 0, 102));
        jButtonSalir1.setText("Salir");
        jButtonSalir1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSalir1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButtonSalir1)
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 676, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(46, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 446, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(41, 41, 41)
                .addComponent(jButtonSalir1)
                .addContainerGap(40, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-748)/2, (screenSize.height-601)/2, 748, 601);
    }// </editor-fold>//GEN-END:initComponents

    private void refresh() {
//        jTextFieldcuartel.setText("");
//        jTextFieldCantidadAlta.setText("");
    }

private void jButtonPesajeManualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPesajeManualActionPerformed
    BuscarPesajeSalida bps = new BuscarPesajeSalida(oper);
    bps.jButtonPesoManual.setVisible(true);
    bps.pesaje.setVisible(false);
    bps.setVisible(true);

    this.dispose();
}//GEN-LAST:event_jButtonPesajeManualActionPerformed

private void btnRegistrarPesoAutomaticoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarPesoAutomaticoActionPerformed
    try {
        String peso = jTextFielPesoTaraCamion.getText();
        pesoTaraCamion = Float.parseFloat(peso);
        System.out.println(pesoTaraCamion + "tara antes de validar");
        float taraEmpaques = 0;
        Pesajesalida p = new Pesajesalida();
        float taratotalempaques = 0;
        float capacidadEmpaques = 0;
        obtenerFechaHoraActual();
        Detallerecepcion dtr = ctrldetallerecepcion.buscarDetallerecepcion_X_idDetallerecepcion(listadetrecepcion.get(0).getIdDetalleRecepcion());
        float pesobruto = dtr.getPesajeentrada().getPesobruto();
        System.out.println(pesobruto + "bruto antes de validar");
//            operarios = ctrloperario.buscarOperarioApellido(oper);
        if (validar(pesoTaraCamion, pesobruto)) {
            if (listadetrecepcion.size() >= 1) {
                for (int d = 0; d < listadetrecepcion.size(); d++) {
                    // va a crear un pesaje por cada detalle de recepcion que tengo
                    //TARA DE LOS EMPAQUES
                    detallerecepcion = listadetrecepcion.get(d);
                    taraEmpaques = calcularTaraEmpaquesPorDetalleRecepcion(detallerecepcion); //peso del empaque por cantida de empaques
                    taratotalempaques = taratotalempaques + taraEmpaques;
                    System.out.println("taratotalempaques " + taratotalempaques);
                }
                //capacidad de los empaques
                //              for (int d = 0; d < listadetrecepcion.size(); d++) {
                //                   capacidadEmpaques= calcularCapacidadEmpaquesPorDetalleRecepcion(detallerecepcion);
                //            }
                //capacidad de los empaques
                //              for (int d = 0; d < listadetrecepcion.size(); d++) {
                //                   capacidadEmpaques= calcularCapacidadEmpaquesPorDetalleRecepcion(detallerecepcion);
                //            }
                float pesoBrut = detallerecepcion.getPesajeentrada().getPesobruto();
                float taraTotalDetallesrecepcion = taratotalempaques + detallerecepcion.getRecepcion().getTransporte().getTaraTransporte();
                //
                System.out.println("pesoBruto " + pesoBrut);
                pesoNeto = (pesoBrut - taraTotalDetallesrecepcion);
                System.out.println("pesoNeto " + pesoNeto);
                //acá dividir
                //                  for (int d = 0; d < listadetrecepcion.size(); d++) {
//                        detallerecepcion = listadetrecepcion.get(d);
//                        int nb = detallerecepcion.getNumeroBines(); //cantidad de empaques
//                        double ce = detallerecepcion.getEmpaque().getCapacidadEmpaque(); //la capacidad debe ser en kilos para poder calcular
//                        float capacidad = (float) (nb * ce);
//                        System.out.println("capacidad empaque * cantidad empaques " + capacidad);
//                        System.out.println(detallerecepcion.getEmpaque().getNombreEmpaque());
                //GUARDAR PESAJESALIDA;
                p.setFechahorapesajesalida(fechaHoraPesajeSalida.toString());
                p.setOperario(operarios);
                p.setPesajeautomaticosalida(pesoAutomaticoSalida);
                p.setTara(pesoTaraCamion);
                p.setPesoneto(pesoNeto);
                try {
                    ctrlpesajesalida.guardarPesajesalida(p);
                    AnalizarContrato aContrato = new AnalizarContrato();
                    cantidad = aContrato.calcularCantidadPendiente(detallerecepcion);
                    System.out.println("Contrato Actualizado :" + aContrato.toString());

                    JOptionPane.showMessageDialog(this, "Pesaje de Salida Registrado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e) {
                    System.out.println("No puede guardar pesaje salida " + e);
                }
                try {
                    estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado"); //a pesosalidapendiente o descarga de lagar
                    System.out.println("estadoespera: " + estadoespera);
                } catch (Exception e) {
                    System.out.println("no encontró el estado Finalizado " + e);
                }
                detallerecepcion.setPesajesalida(p);
                detallerecepcion.setEstadoespera(estadoespera);
                try {
                    ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);
                    actualizarStock(detallerecepcion, pesoNeto);
                    JOptionPane.showMessageDialog(this, "Transporte finalizado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e) {
                    System.out.println("Error en la finalización del proceso " + e);
                }

                System.out.println("Stock Actualizado");
                //}
                //CUANDO VIENE UN SOLO DETALLE DE RECEPCION:
                //CUANDO VIENE UN SOLO DETALLE DE RECEPCION:
            } else {

                detallerecepcion = listadetrecepcion.get(0);
                //                int idre = detallerecepcion.getIdDetalleRecepcion();
                System.out.println("detallerecepcion else" + detallerecepcion.getIdDetalleRecepcion().toString());
                taraEmpaques = calcularTaraEmpaquesPorDetalleRecepcion(detallerecepcion);
                System.out.println("taraempaques " + taraEmpaques);
                float pesoBru = detallerecepcion.getPesajeentrada().getPesobruto();
                //System.out.println("taraempaques " + taraEmpaques);
                System.out.println("pesoBruto " + pesoBru);
                float taraTotalDetallerecepcion = taraEmpaques + detallerecepcion.getRecepcion().getTransporte().getTaraTransporte();
                System.out.println("totalTaraDetallerecepcion " + taraTotalDetallerecepcion);
                pesoNeto = (pesoBru - taraTotalDetallerecepcion);
                System.out.println("pesoNeto " + pesoNeto);
                //GUARDAR PESAJESALIDA;
                //   Pesajesalida p = new Pesajesalida();
                p.setFechahorapesajesalida(fechaHoraPesajeSalida.toString());
                p.setOperario(operarios);
                p.setPesajeautomaticosalida(pesoAutomaticoSalida);
                p.setTara(taraTotalDetallerecepcion);
                p.setPesoneto(pesoNeto);
                try {
                    ctrlpesajesalida.guardarPesajesalida(p);
                    AnalizarContrato aContrato = new AnalizarContrato();
                    cantidad = aContrato.calcularCantidadPendiente(detallerecepcion);
                    System.out.println("Contrato Actualizado");
                    JOptionPane.showMessageDialog(this, " Pesaje Registrado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e) {
                    System.out.println("Error en la finalización del proceso " + e);
                }
                try {
                    estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado"); //a pesosalidapendiente o descarga de lagar
                    System.out.println("estadoespera: " + estadoespera);
                } catch (Exception e) {
                    System.out.println("no encontró el estado Finalizado " + e);
                }
                detallerecepcion.setPesajesalida(p);
                detallerecepcion.setEstadoespera(estadoespera);
                System.out.println("estado setear al detalle linea 528:" + estadoespera);
                try {
                    ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);
                    actualizarStock(detallerecepcion, pesoNeto);
                    JOptionPane.showMessageDialog(this, "Contrato Actualizado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e) {
                    System.out.println("Error en registro " + e);
                }

                System.out.println("Stock Actualizado ");
            }
        } //fin validar
        else {
            p.setFechahorapesajesalida(fechaHoraPesajeSalida.toString());
            p.setOperario(operarios);
            p.setPesajeautomaticosalida(2);
            p.setPesoneto(pesoNeto);
            p.setTara(0);
            try {
                ctrlpesajesalida.guardarPesajesalida(p);
                JOptionPane.showMessageDialog(this, "Fallo de bascula registrado", "PesajeEntrada", JOptionPane.INFORMATION_MESSAGE);
            } catch (Exception e) {
                System.out.println("Error en registrar el pesaje " + e);
            }
            JOptionPane.showMessageDialog(this, "Realice el registro de pesaje manual", "PesajeEntrada", JOptionPane.INFORMATION_MESSAGE);
            jButtonPesajeManual.setVisible(true);
            btnRegistrarPesoAutomatico.setVisible(false);
            //    cambiarEstadoTransporteAFinalizado();
            //  System.out.println("cambió el estado del transporte a finalizado ");
            //cambiarDetalleAFinalizado();
            //}
                /*  String pesoT = peso.getText();
            float  pesoTaraCamion = Float.parseFloat(pesoT);
            float taratotalempaques = 0;
            float capacidadEmpaques = 0;
            float taraEmpaques = 0;
            if (validar(pesoT)) {
            obtenerFechaHoraActual();
            for (int d = 0; d < listadetrecepcion.size(); d++) {
            // va a crear un pesaje por cada detalle de recepcion que tengo; y adem´s modifica el detalle de recepcion con el pesaje creaddo seteandoselo
            detallerecepcion = listadetrecepcion.get(d);
            //            float pesobruto= detallerecepcion.getIdPesajeentrada().getPesobruto();
            //          float pesoneto = pesobruto - pesoTara;
            taraEmpaques = calcularTaraEmpaquesPorDetalleRecepcion(detallerecepcion);
            System.out.println("taraempaques " + taraEmpaques);
            float pesoBruto = obtenerPesoBrutoCamion(detallerecepcion);
            //System.out.println("taraempaques " + taraEmpaques);
            System.out.println("pesoBruto " + pesoBruto);
            Pesajesalida p = new Pesajesalida();
            float taraTotalDetallerecepcion = taraEmpaques + pesoTaraCamion;
            System.out.println("totalTaraDetallerecepcion " + taraTotalDetallerecepcion);
            pesoNeto = (pesoBruto - taraTotalDetallerecepcion);
            System.out.println("pesoNeto " + pesoNeto);
            float pBruto = detallerecepcion.getIdPesajeentrada().getPesobruto();
            float pEmpaque= detallerecepcion.getIdEmpaque().getPesoEmpaque();
            float pCamion= p.getTara();
            float pesoNetoSalida = (pBruto+pEmpaque)-(pCamion+pEmpaque);
            //p.setIdpesajesalida(idPesada);
            p.setFechahorapesajesalida(fechaHoraPesajeSalida.toString());
            p.setIdoperariopesaje(persona);
            p.setPesajeautomaticosalida(pesoAutomaticoSalida);
            p.setTara(pCamion);
            p.setPesoneto(pesoNetoSalida);
            try {
            ctrlpesajesalida.guardarPesajesalida(p);
            JOptionPane.showMessageDialog(this, "El Pesaje de Salida ha sido guardado exitosamente!", "PesajeEntrada", JOptionPane.INFORMATION_MESSAGE);
            //JOptionPane.showMessageDialog(this, "El detalle de recepcion se asocio con el pesaje de salida!", "PesajeEntrada", JOptionPane.INFORMATION_MESSAGE);
            } catch (Exception e) {
            System.out.println("No puede guardar pesaje salida " + e);
            // System.out.println("No puede modificar detalle de recepcion con pesaje de salida " + e);
            }
            System.out.println("id pesaje salida antes de setear al detalle: "+p.getIdpesajesalida());
            try {
            estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado");//a pesosalidapendiente o descarga de lagar
            System.out.println("estadoespera: " + estadoespera);
            } catch (Exception e) {
            System.out.println("no encontró el estado Finalizado " + e);
            }
            //  detallerecepcion.setIdEstadoEspera(estadoespera);
            detallerecepcion.setIdPesajesalida(p);
            try {
            //  detallerecepcion.setIdPesajesalida(p);
            ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);
            JOptionPane.showMessageDialog(this, "El detalle de recepcion se asocio con el pesaje de salida!", "PesajeEntrada", JOptionPane.INFORMATION_MESSAGE);
            } catch (Exception e) {
            System.out.println("No puede modificar detalle de recepcion con pesaje de salida " + e);
            }
            actualizarStock(detallerecepcion, pesoNetoSalida);
            System.out.println("actualizó el stock ");
            }
            }//fin validar
            //    cambiarEstadoTransporteAFinalizado();
            //    PesajeManualSalida2 abmc= new PesajeManualSalida2(proveedor, transporte, producto, transportista, listadetrecepcion);
            //    abmc.setVisible(true);
             */
        }
    } catch (Exception ex) {
        Logger.getLogger(PesajeAutomaticoSalida.class.getName()).log(Level.SEVERE, null, ex);
    }

}//GEN-LAST:event_btnRegistrarPesoAutomaticoActionPerformed

private void jTextFielPesoTaraCamionComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jTextFielPesoTaraCamionComponentShown
    //peso.setText(cadenaBascula);        // TODO add your handling code here:
}//GEN-LAST:event_jTextFielPesoTaraCamionComponentShown

private void jTextFielPesoTaraCamionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFielPesoTaraCamionActionPerformed
    //peso.setText(cadenaBascula);
    // TODO add your handling code here:
}//GEN-LAST:event_jTextFielPesoTaraCamionActionPerformed

private void jTextFielPesoTaraCamionPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTextFielPesoTaraCamionPropertyChange
    //////   peso.setText(cadenaBascula); // TODO add your handling code here:
}//GEN-LAST:event_jTextFielPesoTaraCamionPropertyChange

private void jButtonSalir1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSalir1ActionPerformed
    bps = new BuscarPesajeSalida(oper);
    bps.setVisible(true);




    this.dispose();

    // TODO add your handling code here:
}//GEN-LAST:event_jButtonSalir1ActionPerformed
    public boolean validar(float pt, float pb) {

        boolean ver = false;
        //  float PBruto=dtr.getPesajeentrada().getPesobruto();
        System.out.println(pb + " bruto en validar" + pt + "tara en validar");

        if (pt >= pb || pt == 0) {
            JOptionPane.showMessageDialog(this, "Error: verifique tara y bruto, debera registrar el pesaje manual", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            if (!validador.getInstance().soloContieneNumerosYPuntos(String.valueOf(pt))) {
                JOptionPane.showMessageDialog(this, "Peso Tara incorrecto, ingrese solo números", "Error", JOptionPane.ERROR_MESSAGE);

            }
            if (validador.getInstance().longitudminmax5(String.valueOf(pt))) {
                JOptionPane.showMessageDialog(this, "Error: cantidad de digitos incorrectos", "Error", JOptionPane.ERROR_MESSAGE);
            } else {
                ver = true;

            }
        }
        return ver;




    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnRegistrarPesoAutomatico;
    private javax.swing.JTextField fecha;
    private javax.swing.JButton jButtonPesajeManual;
    private javax.swing.JButton jButtonSalir1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel13;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextField jTextFielPesoTaraCamion;
    private javax.swing.JTextField jTextFieldUsuario;
    // End of variables declaration//GEN-END:variables

    private boolean validar(String cantidad, String cuartel) {
        boolean ver = false;


        if (cantidad.equals("") || cuartel.equals("")) {
            JOptionPane.showMessageDialog(this, "Por favor ingrese la cantidad de producto!!!", "Error", JOptionPane.ERROR_MESSAGE);



        } else if (!validador.getInstance().soloContieneNumerosYPuntos(cantidad)) {
            JOptionPane.showMessageDialog(this, "Cantidad incorrecta: Ingrese solo números para cantidad del producto!!!", "Error", JOptionPane.ERROR_MESSAGE);



        } else if (!validador.getInstance().soloContieneNumeros(cuartel)) {
            JOptionPane.showMessageDialog(this, "Cuartel incorrecto: Ingrese solo números para cuartel!!!", "Error", JOptionPane.ERROR_MESSAGE);


        } else {
            ver = true;


        }
        return ver;


    }

    private Date obtenerFechaHoraActual() {
        java.util.Date utilDate = new java.util.Date(); //fecha actual


        long lnMilisegundos = utilDate.getTime();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        String cadenaFecha = formato.format(utilDate);
        java.sql.Time sqlTime = new java.sql.Time(lnMilisegundos);

        a = String.valueOf(cadenaFecha);
        b = String.valueOf(sqlTime);
        //fecha.setText(a+" "+b);
        fechaHoraPesajeSalida = utilDate;
        System.out.println("fechaHoraPesajeSalida " + fechaHoraPesajeSalida);


        return fechaHoraPesajeSalida;


    }

    private void cambiarEstadoTransporteAFinalizado() {
        try {
            estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("finalizado");
            System.out.println("estadoespera: " + estadoespera);


        } catch (Exception e) {
            System.out.println("no encontró el estado finalizado " + e);


        }
        transporte.setEstadoespera(estadoespera);


        try {
            ctrltransporte.modificarTransporte(transporte);


        } catch (Exception e) {
            System.out.println("No pudo modificar transporte" + e);


        }
        System.out.println("transporte " + transporte);


    }

    private float calcularTaraEmpaquesPorDetalleRecepcion(Detallerecepcion detallerecepcion) {
        float pesoEmpaque = detallerecepcion.getEmpaque().getPesoEmpaque();
        System.out.println("pesoEmpaque " + pesoEmpaque);


        int cantidadEmpaques = detallerecepcion.getNumeroBines();
        System.out.println("cantidadEmpaques " + cantidadEmpaques);
        System.out.println(pesoEmpaque * cantidadEmpaques);


        return pesoEmpaque * cantidadEmpaques;


    }

    private float calcularCapacidadEmpaquesPorDetalleRecepcion(Detallerecepcion detallerecepcion) {
        double capacidadEmpaque = detallerecepcion.getEmpaque().getCapacidadEmpaque();
        System.out.println("pesoEmpaque " + capacidadEmpaque);

        int cantidadEmpaques = detallerecepcion.getNumeroBines();
        System.out.println("cantidadEmpaques " + cantidadEmpaques);
        System.out.println(capacidadEmpaque * cantidadEmpaques);

        return (float) capacidadEmpaque * cantidadEmpaques;
    }

    private void actualizarStock(Detallerecepcion detallerecepcion, float pesoneto) {
        //PARA ACTUALIZAR EL STOCK DEBO TENER EL TOTAL DEL PRODUCTO INGRESADO ES EL PESO NETO DEL PESAJESALIDA PARA ESE PRODUCTO
        producto = detallerecepcion.getProducto();
        int idproducto = producto.getIdProducto();

        try {
            listasprod = ctrlstockproducto.buscarStockproducto_X_idProducto(idproducto);
            System.out.println("stockproducto " + listasprod);
        } catch (Exception e) {
            System.out.println("no encontró stock por idproducto " + e);


        }
        if (!listasprod.isEmpty()) {
            for (Iterator it = listasprod.iterator(); it.hasNext();) {
                stock = (Stockproducto) it.next();


                double stockActual = stock.getCantidadStock();
                System.out.println("stock actual antes de  modificar" + stockActual);


                double stockModificado = stockActual + pesoneto;
                stock.setCantidadStock(stockModificado);
                System.out.println("stock modificado " + stockModificado);

                try {
                    ctrlstockproducto.modificarStockproducto(stock);
                    JOptionPane.showMessageDialog(this, "El Stock del producto:  " + producto.getNombreProducto() + "  ha sido actualizado", "Pesaje Salida", JOptionPane.INFORMATION_MESSAGE);


                } catch (Exception e) {
                    System.out.println("no se puede actualizar el stock. " + e);


                }
            }
        } else if (listasprod.isEmpty()) {
            Stockproducto stockProductoNuevo = new Stockproducto();
            stockProductoNuevo.setProducto(producto);
            stockProductoNuevo.setDetallerecepcionCollection(listadetrecepcion);
            stockProductoNuevo.setFechaHoraStock(validador.getInstance().obtenerFechaSistema());
            stockProductoNuevo.setCantidadStock(pesoneto);
            ctrlstockproducto.guardarStockproducto(stockProductoNuevo);

        }
    }

    private float obtenerPesoBrutoCamion(Detallerecepcion detallerecepcion) {
        float pesoBruto = 0;
        Pesajeentrada pe = detallerecepcion.getPesajeentrada();
        System.out.println("Pesajeentrada pe = " + pe);


        try {
            pen = ctrlpesajeentrada.buscarPesajeentrada_X_idPesajeentrada(pe.getIdpesajeentrada());
            System.out.println("pesajeEntrada " + pen);


        } catch (Exception e) {
            System.out.println("no encontró pesaje entrada por iddetallerecepcion " + e);


        }
        pesoBruto = pen.getPesobruto();


        return pesoBruto;

    }
}
